#include "Server.hpp"
#include<memory>
#include<signal.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>

void Daemon(bool ischdir,bool isclose)
{
	//1.忽略可能引起程序异常退出的情况
	signal(SIGCHLD,SIG_IGN);
	signal(SIGPIPE,SIG_IGN);
	//2.将进程交给band接管
	if(fork()>0)
		exit(0);
	//3.子进程设置一个新的会话
	setsid();
	//4.设置根目录
	if(ischdir)
		chdir("/");
	//5.处理不需要的文件描述符
	if(isclose)
	{
		close(0);
		close(1);
		close(2);
	}
	else
	{
		//推荐使用这个写法
		int fd = open("/dev/null",O_RDWR);
		dup2(fd,0);
		dup2(fd,1);
		dup2(fd,2);
		close(fd);
	}

	
};



int main(int argc, char*argv[])
{
	if(argc!=2)
	{
		std::cerr<<"Usage:"<<argv[0]<<"local port"<<std::endl;
		exit(0);
	}
	uint16_t port =stoi(argv[1]);
	Daemon(false,false);
	unique_ptr<Server> s = make_unique<Server>(port);
	s->Init();
	s->Start();
};
